package cxydmmszl.chapter05.t094;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

/**
 * <li style="color: red;">Prob</li>
 * 找到字符串的最长无重复字符子串
 * <li style="color: green;">Desc</li>
 * 给定一个数组 arr，返回arr的最长无的重复子串的长度（无重复指的是所有字母都不相同）。
 * <li style="color: green;">Input</li>
 * 输入包含两行，第一行包含一个整数 n（1≤n≤10^5），代表数组arr的长度，
 * 第二行包含 n 个整数，代表数组 arr（1≤arr[i]≤10^6）。
 * <li style="color: green;">Output</li>
 * 输出一个整数，代表 arr 的最长无重复字符的长度。
 * <li style="color: blue;">Link</li> CD131
 *
 * @author habitplus
 * @since 2021-09-12 17:21
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] ss = br.readLine().split(" ");
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(ss[i]);
        }
        br.close();

        int ans = maxLen(arr);
        System.out.println(ans);
    }

    private static int maxLen(int[] arr) {
        if (arr == null || arr.length == 0) return 0;

        int n = arr.length;
        int[] dp = new int[n];
        HashMap<Integer, Integer> preIdx = new HashMap<>();

//        for (int i = n - 1; i >= 0; i--) {
//            firstIdx.put(arr[i], i);
//        }

        int ans = 0;
        int j;
        dp[0] = 1;
        preIdx.put(arr[0], 0);
        for (int i = 1; i < n; i++) {
            j = preIdx.getOrDefault(arr[i], -1);
            if (j == -1) {
                dp[i] = dp[i-1] + 1;
            } else {
                dp[i] = i - j;
            }
            ans = Math.max(ans, dp[i]);
            preIdx.put(arr[i], i);
        }

        return ans;
    }
}
